/*
 * Engine Alpha ist eine anfängerorientierte 2D-Gaming Engine.
 *
 * Copyright (c) 2011 - 2014 Michael Andonie and contributors.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

package ea;

import java.awt.*;

/**
 * Ein Strich ist ein einfaches zeichenbares Objekt.<br />
 *
 * @author Michael Andonie
 */
public class Strich extends SimpleGraphic {

	/**
	 * Der erste Punkt
	 */
	private Punkt a;

	/**
	 * Der zweite Punkt
	 */
	private Punkt b;

	/**
	 * Die Farbe der Darstellung
	 */
	private Color c = Color.BLACK;

	/**
	 * Konstruktor.
	 *
	 * @param ax
	 * 		X-Koordinate des Punktes A.
	 * @param ay
	 * 		Y-Koordinate des Punktes A.
	 * @param bx
	 * 		X-Koordinate des Punktes B.
	 * @param by
	 * 		Y-Koordinate des Punktes B.
	 *
	 * @see #Strich(ea.Punkt, ea.Punkt)
	 */
	public Strich (int ax, int ay, int bx, int by) {
		a = new Punkt(ax, ay);
		b = new Punkt(bx, by);
	}

	/**
	 * Konstruktor.
	 *
	 * @param a
	 * 		Der erste Punkt A.
	 * @param b
	 * 		Der zweite Punkt B.
	 *
	 * @see #Strich(int, int, int, int)
	 */
	public Strich (Punkt a, Punkt b) {
		this.a = a;
		this.b = b;
	}

	/**
	 * Setzt die Punkte neu.
	 *
	 * @param a
	 * 		Der neue Punkt a
	 * @param b
	 * 		Der neue Punkt b
	 *
	 * @see #Strich(int, int, int, int)
	 */
	public void punkteSetzen (Punkt a, Punkt b) {
		this.a = a;
		this.b = b;
	}

	/**
	 * Setzt die Punkte neu
	 *
	 * @param ax
	 * 		X-Koordinate des Punktes A.
	 * @param ay
	 * 		Y-Koordinate des Punktes A.
	 * @param bx
	 * 		X-Koordinate des Punktes B.
	 * @param by
	 * 		Y-Koordinate des Punktes B.
	 *
	 * @see #punkteSetzen(ea.Punkt, ea.Punkt)
	 */
	public void punkteSetzen (int ax, int ay, int bx, int by) {
		a = new Punkt(ax, ay);
		b = new Punkt(bx, by);
	}

	/**
	 * Setzt die Farbe des Striches neu
	 *
	 * @param s
	 * 		Der Name der Farbe als String
	 */
	public void farbeSetzen (String s) {
		c = Raum.zuFarbeKonvertieren(s);
	}

	/**
	 * Setzt die Farbe des Striches neu
	 *
	 * @param f
	 * 		Die Farbe als Objekt der Klasse <code>Farbe</code>.
	 */
	public void farbeSetzen (Farbe f) {
		c = f.wert();
	}

	/**
	 * Methode zum zeichnen. Wird individuell ueberschrieben.
	 *
	 * @param g
	 * 		Das Graphics-Objekt.
	 * @param dx
	 * 		Die X-Verschiebung der Kamera
	 * @param dy
	 * 		Die Y-Verschiebung der Kamera
	 */
	@Override
	public void paint (Graphics g, int dx, int dy) {
		g.setColor(c);
		g.drawLine((int) (b.x - dx), (int) (b.y - dy), (int) (a.x - dx), (int) (a.y - dy));
	}
}
